<?php
namespace Exam\Object;

use Tsy\Library\Object;
/**
 * 知识点
 * 
 * @package Exam\Object
 */
class KnowledgeObject extends Object
{
    
    /**

     * 知识点ID ZSDID int(11) 自增 主键 必填  
     * 上一层知识点ID Lzsdid int(11)   必填  
     * 知识点名称 Name char(50)     
     * 科目ID KID int(11)   必填  
     * 层次ID CID int(11)   必填  
     * 专业ID ZID int(11)   必填  
     */
    /**
     * @var string
     */
    protected $main='Knowledge';
    protected $pk='ZSDID';
    public $addFields=['Lzsdid','Name','KID','CID','ZID'];//允许添加的字段，如果数组最后一个元素值为true则表示排除
    public $saveFields=['Lzsdid','Name','KID','CID','ZID'];//允许修改的字段，如果数组最后一个元素值为true则表示排除
    public $addFieldsConfig=[
    //默认为根知识点
      'Lzsdid'=>[//字段名称:上一层知识点ID,数据类型:int(11),注释:
            self::FIELD_CONFIG_DEFAULT=>1,//当 上一层知识点ID(Lzsdid) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 上一层知识点ID(Lzsdid) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 上一层知识点ID(Lzsdid) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 上一层知识点ID(Lzsdid) 的值是否存在，取该值或该函数的值
      ],

//      'Name'=>[//字段名称:知识点名称,数据类型:char(50),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 知识点名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 知识点名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 知识点名称(Name) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 知识点名称(Name) 的值是否存在，取该值或该函数的值
//      ],

//      'KID'=>[//字段名称:科目ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 科目ID(KID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 科目ID(KID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 科目ID(KID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 科目ID(KID) 的值是否存在，取该值或该函数的值
//      ],

//      'CID'=>[//字段名称:层次ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 层次ID(CID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 层次ID(CID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 层次ID(CID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 层次ID(CID) 的值是否存在，取该值或该函数的值
//      ],

//      'ZID'=>[//字段名称:专业ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 专业ID(ZID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 专业ID(ZID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 专业ID(ZID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 专业ID(ZID) 的值是否存在，取该值或该函数的值
//      ]
    ];
    public $saveFieldsConfig=[
    
//      'Lzsdid'=>[//字段名称:上一层知识点ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 上一层知识点ID(Lzsdid) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 上一层知识点ID(Lzsdid) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 上一层知识点ID(Lzsdid) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 上一层知识点ID(Lzsdid) 的值是否存在，取该值或该函数的值
//      ],

//      'Name'=>[//字段名称:知识点名称,数据类型:char(50),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 知识点名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 知识点名称(Name) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 知识点名称(Name) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 知识点名称(Name) 的值是否存在，取该值或该函数的值
//      ],

//      'KID'=>[//字段名称:科目ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 科目ID(KID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 科目ID(KID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 科目ID(KID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 科目ID(KID) 的值是否存在，取该值或该函数的值
//      ],

//      'CID'=>[//字段名称:层次ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 层次ID(CID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 层次ID(CID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 层次ID(CID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 层次ID(CID) 的值是否存在，取该值或该函数的值
//      ],

//      'ZID'=>[//字段名称:专业ID,数据类型:int(11),注释:
//            self::FIELD_CONFIG_DEFAULT=>'null',//当 专业ID(ZID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_DEFAULT_FUNCTION=>'null',//当 专业ID(ZID) 的值不存在时，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE=>'null',//不管 专业ID(ZID) 的值是否存在，取该值或该函数的值,
//            self::FIELD_CONFIG_VALUE_FUNCTION=>'null',//不管 专业ID(ZID) 的值是否存在，取该值或该函数的值
//      ]
    ];
    protected $property=[
        'Discipline'=>[//科目ID  科目  属性
            self::RELATION_TABLE_NAME=>'Discipline',//属性关联表
            self::RELATION_TABLE_COLUMN=>'KID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'KID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ONE_OBJECT,
        ],
        'Level'=>[//层次ID  层次  属性
            self::RELATION_TABLE_NAME=>'Level',//属性关联表
            self::RELATION_TABLE_COLUMN=>'CID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'CID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ONE_OBJECT,
        ],
        'Major'=>[//专业ID  专业  属性
            self::RELATION_TABLE_NAME=>'Major',//属性关联表
            self::RELATION_TABLE_COLUMN=>'ZID',//关联表中的关联字段
            self::RELATION_MAIN_COLUMN=>'ZID',//主笔中的关联字段
            self::RELATION_TABLE_PROPERTY=>self::PROPERTY_ONE_OBJECT,
        ],
    ];
    protected $link=[
       
    ];
    protected $searchFields=['ZSDID','Lzsdid','Name','KID','CID','ZID'];
    protected $searchTable='Knowledge';
    protected $searchWFieldsConf=[
        'Knowledge'=>'Knowledge',        
    ];
    protected $searchWFieldsGroup=[
        'Knowledge'=>['ZSDID','Lzsdid','Name','KID','CID','ZID'],
    ];

    /**
     * 按层次、专业、科目 获得所有的知识点
     * @param $CID 层次ID
     * @param $ZID 专业ID
     * @param $KID 科目ID
     */
    function getAllKnowledges($CID=1,$ZID=1,$KID=1,$Lzsdid=1)
    {
        $condition = [
//          'CID'=>$CID,
//            'ZID'=>$ZID,
//            'KID'=>$KID,
            'Lzsdid'=>$Lzsdid //最上层的父节点。
        ];
        if ($ZID!=1){
            $condition = [          'ZID'=>$ZID,            ];
        }
        if ($CID!=1){
            $condition = [          'CID'=>$CID,            ];
        }
        if ($KID!=1){
            $condition = [          'KID'=>$KID,            ];
        }
//        foreach ($condition as $value){
//            if ($value) continue;
//            return 'CID or  ZID or KID  未传值';
//        }

        $t1 = [];
        $this->getKnowledge($condition,$t1);
        if (count($t1)<1) return [];
        $temp = parent::get($t1[count($t1)-1]['ZSDID']);
        $knowledges['Discipline'] = $temp['Discipline'];
        $knowledges['Level'] = $temp['Level'];
        $knowledges['Major'] = $temp['Major'];
        $knowledges['zsd'] = $t1;
        return $knowledges;

    }

    function getKnowledge($condition ,&$knowledges){
        $temp =  M('knowledge')->where($condition)->field('ZSDID,Lzsdid,Name')->select();
        if ($temp){
            foreach ($temp as $item) {
                $knowledges[] = $item;
//                $condition['Lzsdid'] = $item['ZSDID'];
//               $this->getKnowledge($condition,$knowledges);
            }
            foreach ($temp as $item) {
//                $knowledges[] = $item;
                if ($item['ZSDID'] == 1)    continue;
                $condition['Lzsdid'] = $item['ZSDID'];
                $this->getKnowledge($condition,$knowledges);
            }
        }
        else{
            return ;
        }
    }

    function add($data = [], $Properties = false)
    {
        $importantVal=[
            'Name'=>'知识点不能为空',
            'CID'=>'层次不能为空',
            'ZID'=>'专业不能为空',
            'KID'=>'科目不能为空',

         //   'Lzsdid'=>'上一层知识点不能为空'
        ];
        $data = array_merge($data,$_POST);
        foreach($importantVal as $key=>$var)
        {
            if(!array_key_exists($key,$data))
            {
                return $importantVal[$key];
            }
        }
        if (!array_key_exists('Lzsdid',$data)){
            $data['Lzsdid'] = 1;
        }
        $condition=[
            'Name'=>$data['Name'],
            'CID'=>$data['CID'],
            'ZID'=>$data['ZID'],
            'KID'=>$data['KID']
        ];
        $Knowledge=M('knowledge');
        $find=$Knowledge->where($condition)->find();
        if($find)
        {
            return "知识点已存在";
        }

        return parent::add($data, $Properties); // TODO: Change the autogenerated stub
    }

    function get($ID = false)
    {
        $temp = parent::get($ID);
        $knowledges['Discipline'] = $temp['Discipline'];
        $knowledges['Level'] = $temp['Level'];
        $knowledges['Major'] = $temp['Major'];
        $knowledges['zsd'][0]['ZSDID'] = $temp['ZSDID'];
        $knowledges['zsd'][0]['Lzsdid'] = $temp['Lzsdid'];
        $knowledges['zsd'][0]['Name'] = $temp['Name'];
       $this->getKnowledge(['Lzsdid'=>$temp['ZSDID']],$knowledges['zsd']);
        return $knowledges; // TODO: Change the autogenerated stub
    }


}